/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.ipartek.formacion.gestformwww.modelo.clases;

import com.ipartek.formacion.gestformwww.modelo.beans.Estado;
import com.ipartek.formacion.gestformwww.modelo.beans.excepciones.GestorFormacionExcepcion;
import com.ipartek.formacion.gestformwww.modelo.interfaces.IEstadoDAO;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author D & G
 */
public class SQLServerEstadoDAO implements IEstadoDAO{
   
    private ResourceBundle rb;

     /**
     * Constructor de la clase.
     **/
    public SQLServerEstadoDAO() {
        rb = ResourceBundle.getBundle("com.ipartek.formacion.gestformwww.controlador.excepciones");
    }
/**
     * Método que crea un estado.
     * @author
     * @param Objeto Estado.
 *      @return true-> si se ha creado
     */
    public boolean crearEstado(Estado estado) throws GestorFormacionExcepcion {
        try {
            return ejecutarSentencia("INSERT INTO Estado (EstDescr,EstPosibles) values('" +
                    estado.getDescripcion() + "','" +
                    estado.getEstPosibles() + "')");
        } catch (GestorFormacionExcepcion gfe) {
            Logger.getLogger(SQLServerEstadoDAO.class.getName()).log(Level.SEVERE, null, gfe);
            throw new GestorFormacionExcepcion(gfe.getMessage());
        }
    }
/**
     * Método que borra un estado.
     * @author
     * @param Objeto Estado.
 *      @return true-> si se ha borrado
     */
    public boolean eliminarEstado(int idEstado) throws GestorFormacionExcepcion {
          boolean res = false;

        try {
            if (ejecutarSentencia("DELETE FROM CONTACTO WHERE ConId=" + idEstado));
            res = true;
        } catch (GestorFormacionExcepcion gfe) {
            Logger.getLogger(SQLServerEstadoDAO.class.getName()).log(Level.SEVERE, null, gfe);
            throw new GestorFormacionExcepcion(gfe.getMessage());
        }
        return res;
    }
/**
     * Método que lista los estados.
     * @author
 *      @return ArrayList de Estados
     */
    public ArrayList<Estado> listarEstados() throws GestorFormacionExcepcion {
        ArrayList<Estado> alEstados = new ArrayList<Estado>();
         Statement stmt=null;
         Connection con=null;
        ResultSet rs = null;
        String sentencia = "SELECT * FROM Estado";
        try {
            con = SQLServerDAOFactory.conecta();
            stmt = con.createStatement();
        } catch (SQLException ex) {
            Logger.getLogger(SQLServerEstadoDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new GestorFormacionExcepcion(rb.getString("no-conexion"));
        }
        try {
            rs = stmt.executeQuery(sentencia);
            while (rs.next()) {
                Estado auxEstado = new Estado( rs.getInt("EstId"),rs.getString("EstDescr"),rs.getString("EstPosibles"));
                alEstados.add(auxEstado);
            }
            rs.close();
            stmt.close();
        } catch (SQLException ex) {
            Logger.getLogger(SQLServerEstadoDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new GestorFormacionExcepcion(rb.getString("no-sql"));
        } finally {
            SQLServerDAOFactory.desconecta(con);
        }
        return alEstados;
    }
/**
     * Método que modifica un estado.
     * @author
     * @param Objeto Estado.
 *      @return true-> si se ha modificado
     */
    public boolean modificarEstado(Estado estado) throws GestorFormacionExcepcion {
         return ejecutarSentencia("UPDATE CONVOCATORIA SET EstDescr='" + estado.getDescripcion()
                    + "',EstPosibles='" +  estado.getEstPosibles() + "' WHERE EstId=" + estado.getEstId());
    }
/**
     * Método que visualiza un estado.
     * @author
     * @param idEstado.
 *      @return Objeto Estado
     */
    public Estado visualizarEstado(int idEstado) throws GestorFormacionExcepcion {
        ResultSet rs = null;
        Estado auxEstado=null;
         Statement stmt=null;
         Connection con=null;

        String sentencia = "SELECT * FROM Estado WHERE EstId=" + idEstado;
        try {
            con = SQLServerDAOFactory.conecta();
            stmt = con.createStatement();
        } catch (SQLException ex) {
            Logger.getLogger(SQLServerEstadoDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new GestorFormacionExcepcion(rb.getString("no-conexion"));
        }
        try {
            rs = stmt.executeQuery(sentencia);
            while (rs.next()) {
                auxEstado = new Estado( rs.getInt("EstId"),rs.getString("EstDescr"),rs.getString("EstPosibles"));
            }
            rs.close();
            stmt.close();
        } catch (SQLException ex) {
            Logger.getLogger(SQLServerEstadoDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new GestorFormacionExcepcion(rb.getString("no-sql"));
        } finally {
            SQLServerDAOFactory.desconecta(con);
        }
        return auxEstado;
    }
/**
     * Método que ejecuta una sentencia SQL.
     * @author
     * @param sentencia
 *      @return true-> si se ha ejecutado correctamente
     */
     private boolean ejecutarSentencia(String sentencia) throws GestorFormacionExcepcion {
        boolean correcto = false;
         Statement stmt=null;
         Connection con=null;
        try {
            con = SQLServerDAOFactory.conecta();
            stmt = con.createStatement();
        } catch (SQLException ex) {
            Logger.getLogger(SQLServerEstadoDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new GestorFormacionExcepcion(rb.getString("no-conexion"));
        }
        try {
            stmt.executeUpdate(sentencia);
            stmt.close();
            correcto = true;
        } catch (SQLException ex) {
            Logger.getLogger(SQLServerEstadoDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new GestorFormacionExcepcion(rb.getString("no-sql"));
        } finally {
            SQLServerDAOFactory.desconecta(con);
        }
        return correcto;
    }

}
